package com.distribute.rest.service.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.distribute.mapper.DbContentMapper;
import com.distribute.pojo.DbContent;
import com.distribute.rest.dao.JedisClient;
import com.distribute.rest.service.ContentService;
import com.distribute.common.util.JsonUtils;
import com.distribute.mapper.DbContentMapper;
import com.distribute.pojo.DbContent;
import com.distribute.pojo.DbContentExample;
import com.distribute.pojo.DbContentExample.Criteria;

import sun.tools.jar.resources.jar;

/**
 * 内容管理
 * 思路：根据内容分类id获取内容列表--查询redis缓存中（hash）有无相应的value值（不为空），有则获取并转换成了list返回，无--查询数据库获取相应内容数据
 * --添加缓存，将该内容信息加入缓存（hash key,内容分类id：value,内容json字符串)--返回内容数据list
 * 
 * 
 */
@Service
public class ContentServiceImpl implements ContentService {

	@Autowired
	private DbContentMapper contentMapper;
	@Autowired
	private JedisClient jedisClient;
	@Value("${INDEX_CONTENT_REDIS_KEY}")
	private String INDEX_CONTENT_REDIS_KEY;
	
	//获取商品内容列表：先从缓存中取，未取到才从数据库中查询。从缓存中查出的是符合json格式的字符串，而从数据库中查询出来的是list。同步缓存需要将list转为字符串
	@Override
	public List<DbContent> getContentList(long contentCid) {
		//从缓存中取内容
		try {
			String result = jedisClient.hget(INDEX_CONTENT_REDIS_KEY, contentCid + "");
			if (!StringUtils.isBlank(result)) {
				//把字符串转换成list
				List<DbContent> resultList = JsonUtils.jsonToList(result, DbContent.class);
				return resultList;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//缓存无--根据内容分类id查询内容列表
		DbContentExample example = new DbContentExample();
		Criteria criteria = example.createCriteria();
		criteria.andCategoryIdEqualTo(contentCid);
		//执行查询
		List<DbContent> list = contentMapper.selectByExample(example);
		
		//向缓存中添加内容
		try {
			//把list转换成字符串
			String cacheString = JsonUtils.objectToJson(list);
			jedisClient.hset(INDEX_CONTENT_REDIS_KEY, contentCid + "", cacheString);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return list;
	}

}
